//#include <stdio.h>
//#include <stdlib.h>
//#include <windows.h>
//#include <WinSock2.h>
//
//#define MAX_LISTEN_QUEUE_NUMBER                 10
//#define HOST_PORT                               10000
//#define MAX_PACKET_LENGTH                       1400
//int main()
//{
//    WORD wVersionRequested;
//    WSADATA wsaData;
//    int err;
//
//    wVersionRequested = MAKEWORD( 2, 2 );
//
//    err = WSAStartup( wVersionRequested, &wsaData );
//    if ( err != 0 )
//    {
//        /* Tell the user that we could not find a usable */
//        /* WinSock DLL.                                  */
//        return 0;
//    }
//
//    /* Confirm that the WinSock DLL supports 2.2.*/
//    /* Note that if the DLL supports versions greater    */
//    /* than 2.2 in addition to 2.2, it will still return */
//    /* 2.2 in wVersion since that is the version we      */
//    /* requested.                                        */
//
//    if ( LOBYTE( wsaData.wVersion ) != 2 ||
//            HIBYTE( wsaData.wVersion ) != 2 )
//    {
//        /* Tell the user that we could not find a usable */
//        /* WinSock DLL.                                  */
//        WSACleanup( );
//        return 0;
//    }
//
//    int servfd, clientfd;
//    servfd = socket(AF_INET, SOCK_STREAM, 0);
//    if(servfd < 0)
//    {
//        printf("server create socket failed.\n");
//        return 0;
//    }
//    int on = 1;
//    if(setsockopt(servfd, SOL_SOCKET, SO_REUSEADDR, (const char *)&on, sizeof(on)) < 0)
//    {
//        printf("set socket option failed.\n");
//        return 0;
//    }
//    struct sockaddr_in servaddr;
//    struct sockaddr_in clientaddr;
//
//    memset(&servaddr,0,sizeof(servaddr));
//    memset(&clientaddr,0,sizeof(clientaddr));
//
//    servaddr.sin_family = AF_INET;
//    servaddr.sin_port = htons(HOST_PORT);
//    servaddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
//    if(bind(servfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
//    {
//        printf("bind failed.\n");
//        return 0;
//    }
//    if(listen(servfd,10) < 0)
//    {
//        printf("listen failed.\n");
//        return 0;
//    }
//    char buf[MAX_PACKET_LENGTH];
//    memset(buf,0,MAX_PACKET_LENGTH);
//    int length = sizeof(clientaddr);
//
//    int clientRecord[FD_SETSIZE];
//    int index = 0;
//    for(; index < FD_SETSIZE; index++)
//        clientRecord[index] = -1;
//    fd_set readSet;
//    FD_ZERO(&readSet);
//    FD_SET(servfd,&readSet);
//    int maxfd = servfd;
//
//    for(;;)
//    {
//        clientfd = accept(servfd, (struct sockaddr *)&clientaddr,&length);
//
//        for(index = 0; index < FD_SETSIZE; index++)
//        {
//            if(clientRecord[index] < 0)
//            {
//                clientRecord[index] = clientfd;
//                break;
//            }
//        }
//        if(index == FD_SETSIZE)
//        {
//            printf("too many sockets.\n");
//            break;
//        }
//        for(index = 0; index < FD_SETSIZE; index++)
//        {
//            if(clientRecord[index] > 0)
//            {
//                FD_SET(clientRecord[index],&readSet);
//                maxfd = maxfd > clientRecord[index] ? maxfd : clientRecord[index];
//            }
//            else
//                break;
//        }
//
//        struct timeval time;
//        time.tv_sec = 10;
//        time.tv_usec = 0;
//        if(select(maxfd,&readSet,NULL,NULL,&time) <= 0)
//            break;
//
//        int sockfd;
//
//        for(index = 0; index < FD_SETSIZE; index++)
//        {
//            if((sockfd = clientRecord[index]) < 0)
//                continue;
//            if(FD_ISSET(sockfd,&readSet))
//            {
//                while(1)
//                {
//                    recv(sockfd,buf,MAX_PACKET_LENGTH,0);
//                    printf("%s\n",buf);
//                    if(strcmp(buf,"end") == 0)
//                        break;
//                }
//                closesocket(sockfd);
//                clientRecord[index] = -1;
//            }
//        }
//    }
//    closesocket(servfd);
//    return 0;
//}
